package com.example.zxd;

import java.util.Scanner;

/**
 * 涂色问题 <p>
 * 描述：这是一个涂色问题。现在有一张网格，一共 3 行，每行 n 个。你需要用 3 种颜色给网格上色，
 * 需要确保相邻格子颜色不同。请问一共有多少种上色方案呢？ <p>
 * 答案对 10^9+7 取模。<p>
 * 输入：一行一个整数 n，1 ≤ n ≤ 10^6。<p>
 * 输出：一行一个整数，表示方案数。<p>
 * 样例输入：<p>
 * 1<p>
 * 样例输出：<p>
 * 12<p>
 * 注释：<p>
 * 用 1，2，3表示颜色，那么方案有：<p>
 * 121<p>
 * 212<p>
 * 312<p>
 * 123<p>
 * 213<p>
 * 313<p>
 * 131<p>
 * 321<p>
 * 231<p>
 * 132<p>
 * 323<p>
 * 232<p>
 * 共 12 种。<p>
 * ！！！！！重点题 ！！！！！ 反复回味递推 ！！！！！
 *
 * @author: scarborough
 * @datetime: 2025/3/19 - 15:32
 * @status: AC
 */
public class PROB1005 {
    private static final int MOD = 1000000007;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.close();

        // 1 和 3 位相同的情况有六种
        long same = 6;
        // 1 和 3 位不同的情况有六种
        long diff = 6;
        // 暂存相同情况更新后的数值，因为还要拿原始数值计算不同情况下的更新数值
        long temp;
        for (int i = 1; i < n; i++) {
            // 相同 * 3 + 不同 * 2
            temp = (same * 3 % MOD + diff * 2 % MOD) % MOD;
            // 相同 * 2 + 不同 * 2
            diff = (same * 2 % MOD + diff * 2 % MOD) % MOD;
            same = temp;
        }
        System.out.println((same + diff) % MOD);
    }
}
